<?php

class AlumnosController extends AppController {

    public $sl_alumnos = array(
        'actions' => array('V' => 'view', 'E' => 'edit', 'D' => 'delete'),
        'filters' => array(
            array('name' => 'Alumno.nombre', 'label' => 'Nombre'),
            array('name' => 'Escuela.id', 'label' => 'Escuela', 'presentation' => 'AUTOCOMPLETE', 'classparams' => '{"model":"Escuela"}')
        ),
        'columns' => array(
            array('name' => 'Alumno.nombre', 'label' => 'Nombre'),
            array('name' => 'Escuela.id', 'label' => 'Escuela', 'presentation' => 'AUTOCOMPLETE', 'classparams' => '{"model":"Escuela"}'),
            array('name' => 'Alumno.curso', 'label' => 'Curso')
        )
    );
    public $maint_alumnos = array(
        'fields' => array(
            'Descripción del Alumno' =>
            array(
                array('name' => 'fecha_carga', 'label' => 'Fecha Carga', 'presentation' => 'DATETIME', 'classparams' => '{"force":true}', 'isvisible' => false, 'actions' => 'A'),
                array("name" => "user_id", "label" => "Usuario Carga", "presentation" => "USER", 'classparams' => '{"force":true}', 'isvisible' => false, "actions" => "A"),
                array('name' => 'nombre', 'label' => 'Nombre'),
                array('name' => 'escuela_id', 'label' => 'Escuela', 'presentation' => 'AUTOCOMPLETE', 'classparams' => '{"model":"Escuela"}'),
                array('name' => 'curso', 'label' => 'Curso', 'size' => '10'),
                array('name' => 'tipo_documento', 'label' => 'Tipo Documento', 'presentation' => 'TIPO_DOCUMENTO'),
                array('name' => 'nro_documento', 'label' => 'Nro. Documento', 'presentation' => 'DOCUMENTO', 'size' => '10')
            )
        ),
        'tables' => array(
            'Participó en los Programas' => array(
                'model' => 'Programa',
                'fields' => array(
                    array('name' => 'nombre', "label" => 'Programa')
                ),
                'order' => array('Programa.nombre ASC')
            )
        )
    );
    public $importar_alumnos = array(
        'fields' => array(
            'Descripción de la Importación' =>
            array(
                array('name' => 'fecha_carga', 'label' => 'Fecha Carga', 'presentation' => 'DATETIME', 'classparams' => '{"force":true}', 'isvisible' => false),
                array("name" => "user_id", "label" => "Usuario Carga", "presentation" => "USER", 'classparams' => '{"force":true}', 'isvisible' => false, "actions" => "A"),
                array('name' => 'escuela_id', 'label' => 'Escuela', 'presentation' => 'AUTOCOMPLETE', 'classparams' => '{"model":"Escuela"}'),
                array('name' => 'tmp_excel', 'label' => 'Archivo Excel', 'presentation' => 'FILE')
            )
        ),
        'tables' => array(
            'Programas En Los Que Participaron' => array(
                'model' => 'Programa',
                'fields' => array(
                    array('name' => 'nombre', "label" => 'Programa')
                ),
                'order' => array('Programa.nombre ASC')
            )
        )
    );

    public function import() {
        $this->maint = $this->importar_alumnos;

        if ($this->request->is('post') || $this->request->is('put')) {
            // Incluye la libreria PHPExcel
            App::import('Lib', 'PHPExcel');

            // Carga el archivo Excel
            $objPHPExcel = PHPExcel_IOFactory::load($this->request->data['Alumno']['tmp_excel']['tmp_name']);

            // Obtengo los programas
            $programas = array();
            foreach ($this->request->data['table']['Programa'] as $programa) {
                if (is_array($programa)) {
                    $programas[] = $programa['pk'];
                }
            }

            // Saco el excel del POST para que no lo suba el archivo al servidor
            unset($this->request->data['Alumno']['tmp_excel']);
            
            // Obtiene los valores de los campos de acuerdo a sus presentation
            $request_data = $this->processData($this->request->data, "fields");

            // Inicia la transaccion SQL
            $dataSource = $this->Alumno->getDataSource();
            $dataSource->begin();

            // Recorro cada hoja del Excel
            $registros = array();
            $filas = 0;
            foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
                // Recorro cada fila de la hoja
                foreach ($worksheet->getRowIterator() as $row) {
                    $filas++;
                    //$fila = $row->getRowIndex(); //1,2,3...

                    $array = array(
                        'Alumno' => array(
                            'fecha_carga' => $request_data['Alumno']['fecha_carga'],
                            'escuela_id' => $request_data['Alumno']['escuela_id']
                        ),
                        'Programa' => $programas
                    );

                    // Recupero una fila
                    $cellIterator = $row->getCellIterator();
                    $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
                    foreach ($cellIterator as $cell) {
                        if (!is_null($cell)) {
                            $ord = ord(substr($cell->getCoordinate(), 0, 1)) - ord("A"); // A1, B1, etc... de saco la A,B,C ... y finalmente 0,1,2 
                            $val = $cell->getCalculatedValue(); // Valor del campo

                            if ($ord == 0) {
                                $array['Alumno']['nombre'] = $val;
                            } elseif ($ord == 1) {
                                $array['Alumno']['curso'] = $val;
                            } elseif ($ord == 2) {
                                $array['Alumno']['tipo_documento'] = $val;
                            } elseif ($ord == 3) {
                                $array['Alumno']['nro_documento'] = $val;
                            }
                        }
                    }
                    $registros[] = $array;
                }
                
                // Salgo para que recorra solo el primer worksheet
                break; 
            }
            
            // Trata de guardarlo
            if (!$this->Alumno->saveAll($registros)) {
                $dataSource->rollback();
                $this->Session->setFlash(__('Los registros no pudieron ser ingresados'));
            }

            // Termina la transaccion SQL
            $dataSource->commit();

            // Retorna al index
            $this->Session->setFlash(__('Los ' . $filas . ' registros han sido ingresados correctamente'));
            $this->redirect(array('action' => isset($this->maint['return']) ? $this->maint['return'] : "index"));
        }

        parent::add();
    }

    public function add() {
        $this->maint = $this->maint_alumnos;
        parent::add();
    }

    public function edit($id = null) {
        $this->maint = $this->maint_alumnos;
        parent::edit($id);
    }

    public function index() {
        $this->search_list = $this->sl_alumnos;
        parent::index();
    }

    public function view($id = null) {
        $this->maint = $this->maint_alumnos;
        parent::view($id);
    }

}